/**
 * SysUserService.java -- 2017-10-16 17:18:36
 * 作者：欧增奇 -- 代码生成器自动生成
 * 联系方式：425752797@qq.com
 * http://www.ouzengqi.com/
 */
package com.ozq.sys.service.inter;

import java.util.List;
import java.util.Map;

import org.springframework.cache.annotation.CacheConfig;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.transaction.annotation.Transactional;

import com.ozq.common.page.Page;
import com.ozq.sys.dao.entity.SysUser;

/**
 * <系统-用户表接口> <功能详细描述>
 * 
 * @author 欧增奇
 * @version [V2.0, 2017年10月16日]
 * @see [相关类/方法]
 * @since [产品/模块版本]
 */
@CacheConfig(cacheNames = "sysUser", keyGenerator = "kylinKeyGenerator")
public interface SysUserService
{
    /** ------------------------------------公共-工具------------------------------------ **/
    /**
     * 分页公共实现
     */
    @Cacheable
    Page pageManage(Page page);

    /**
     * 缓存清理
     */
    @CacheEvict(allEntries = true)
    void clearCache();

    /** ------------------------------------公共-业务------------------------------------ **/
    /** --公共-业务-统计-- **/
    /**
     * 统计所有的记录数
     * 
     * @return int
     */
    @Cacheable
    int countAll();

    /**
     * 按照条件精确统计系统-用户表
     * 
     * @param sysUser
     * @return int
     */
    @Cacheable
    int countBy(SysUser sysUser);

    /**
     * 按照条件模糊统计系统-用户表
     * 
     * @param sysUser
     * @return int
     */
    @Cacheable
    int countLike(SysUser sysUser);

    /** --公共-业务-添加-- **/
    /**
     * 插入系统-用户表
     * 
     * @param sysUser
     * @return sysUser
     */
    @Transactional
    @CacheEvict(allEntries = true)
    SysUser add(SysUser sysUser);

    /**
     * 插入系统-用户表集合
     * 
     * @param SysUser
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean addList(List<SysUser> sysUsers);

    /**
     * 批量插入系统-用户表，当id存在更新这条数据，不存在插入这条数据（注意：会影响所有字段）
     * 
     * @param sysUsers
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean addUpdateList(List<SysUser> sysUsers);

    /** --公共-业务-查询-- **/
    /**
     * 按照系统-用户表查询,如果存在id，则用id查询(本方法只会返回一条数据，当查询有1条以上返回null)
     * 
     * @param sysUser
     * @return sysUser
     */
    @Cacheable
    SysUser find(SysUser sysUser);

    /**
     * 按照id查询系统-用户表
     * 
     * @param userId
     * @return sysUser
     */
    @Cacheable
    SysUser findById(Integer userId);

    /**
     * 按照ids查询系统-用户表
     * 
     * @param userIds
     * @return sysUser集合
     */
    @Cacheable
    List<SysUser> findByIds(List<Integer> userIds);

    /**
     * 按照条件精确查询系统-用户表返回集合方法
     * 
     * @param sysUser
     * @return sysUser集合
     */
    @Cacheable
    List<SysUser> listBy(SysUser sysUser);

    /**
     * 按照条件模糊查询系统-用户表返回集合方法
     * 
     * @param sysUser
     * @return sysUser集合
     */
    @Cacheable
    List<SysUser> listLike(SysUser sysUser);

    /**
     * 按照分页条件精确查询系统-用户表返回集合方法
     * 
     * @param sysUser
     * @return sysUser集合
     */
    @Cacheable
    List<SysUser> listPageBy(Page page, SysUser sysUser);

    /**
     * 按照分页条件模糊查询系统-用户表返回集合方法
     * 
     * @param sysUser
     * @return sysUser集合
     */
    @Cacheable
    List<SysUser> listPageLike(Page page, SysUser sysUser);

    /** --公共-业务-修改-- **/
    /**
     * 修改系统-用户表
     * 
     * @param sysUser
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean update(SysUser sysUser);

    /**
     * 批量修改系统-用户表
     * 
     * @param sysUsers
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean updateList(List<SysUser> sysUsers);

    /** --公共-业务-删除-- **/
    /**
     * 指定id删除
     * 
     * @param userId
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean deleteById(Integer userId);

    /**
     * 批量删除指定ids
     * 
     * @param userId
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean deleteByIds(List<Integer> userIds);

    /**
     * 按照条件精确删除系统-用户表
     * 
     * @param sysUser
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean deleteBy(SysUser sysUser);

    /**
     * 按照条件模糊删除系统-用户表
     * 
     * @param sysUser
     * @return boolean
     */
    @Transactional
    @CacheEvict(allEntries = true)
    boolean deleteLike(SysUser sysUser);

    /** --公共-业务-自定义-- **/
    /**
     * 自定义方法
     * 
     * @param sysUser
     * @return map集合
     */
    @Cacheable
    List<Map<String, Object>> custom(SysUser sysUser);
}